# main_window.py
from PyQt5.QtWidgets import (
    QMainWindow, QDockWidget, QStatusBar, QMenu, QFileDialog, QInputDialog,QScrollArea,
    QMessageBox, QTabWidget, QToolBar, QSplitter, QAction
)
from PyQt5.QtCore import Qt

import os
import sys
from ui.project_tree import ProjectTreeDock
from ui.table_window import TableWindow
from ui.data_import_dialog import DataImportDialog
from ui.vertical_visualization import VerticalVisualizationDock
from ui.horizontal_visualization import MainWindow1
from PyQt5.QtWebEngineWidgets import QWebEngineView
import plotly.graph_objs as go


# 设计井数据可视化界面主窗口(逐步进行)
# 1. 菜单栏
# 2. 工具栏
# 3. 调用项目树
# 4. 调用竖向可视化:可交互式可视化
# 5. 调用横向可视化:可交互式可视化

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()  # 调用QMainWindow的构造函数
        self.setup_ui()

    def setup_ui(self):
        # 设置窗口标题
        self.setWindowTitle("井数据可视化程序")
        self.resize(1000, 800)

        # 创建菜单栏
        self._create_menu_bar()

        # 创建工具栏
        self._create_tool_bar()

        # 许用户调整视图比例
        #设置为滚动区域
        self.central_scroll_area = QScrollArea()
        self.setCentralWidget(self.central_scroll_area)

        # 添加水平可视化标签页
        self.horizontal_visualization = MainWindow1()
        # self.setCentralWidget
        self.central_scroll_area.setWidget(self.horizontal_visualization)
        self.central_scroll_area.setWidgetResizable(True)


        # 创建项目树停靠窗口
        self.project_tree_dock = ProjectTreeDock()
        self.addDockWidget(self.project_tree_dock.dock_area, self.project_tree_dock)

        # 创建竖向可视化停靠窗口
        self.vertical_visualization_dock = VerticalVisualizationDock()
        self.addDockWidget(self.vertical_visualization_dock.dock_area, self.vertical_visualization_dock)

    def _create_menu_bar(self):
        # 创建文件菜单
        file_menu = self.menuBar().addMenu("文件")

        # 创建打开文件菜单
        open_file_action = QAction("打开文件", self)  # 解释:QAction是Qt中的一个类，用于创建一个动作，即一个按钮或菜单项
        # open_file_action.triggered.connect(self.file_open)#解释:triggered.connect()是QAction类的一个方法，用于连接一个信号到另一个信号
        # file_menu.addAction(open_file_action)#解释:addAction()是QMenu类的一个方法，用于添加一个动作到菜单中

        # 创建保存文件菜单
        save_file_action = QAction("保存文件", self)
        # save_file_action.triggered.connect(self.file_save)
        # file_menu.addAction(save_file_action)

    def _create_tool_bar(self):
        # 创建工具栏
        tool_bar = self.addToolBar("工具")
        self.addToolBar(tool_bar)

        # - 支持导入txt 文件。
        #  1. 如果数据库没有当前文件,导入的文件数据保存在数据库
        #  2. 从数据库读取对应文件表格数据
        #  3. 点击导入后,打开表格窗口,进行预导入DataImportDialog操作

        # 创建打开文件按钮
        import_action = QAction("导入数据", self)
        import_action.triggered.connect(self._import_action)
        tool_bar.addAction(import_action)

    # 导入数据
    def _import_action(self):
        file_path, _ = QFileDialog.getOpenFileName(  # 解释: 会弹出一个文件选择窗口，让用户选择要导入的数据文件。
            self, "选择数据文件", "",
            "所有支持的文件 (*.txt);;"
            "文本文件 (*.txt)"
        )

        if file_path:
            try:
                # 根据文件扩展名选择导入方式
                if file_path.endswith(".txt"):
                    self.import_txt_data(file_path)
            except Exception as e:
                QMessageBox.warning(self, "错误", f"导入数据失败:{e}")
                return

    # 导入txt数据
    def import_txt_data(self, file_path):
        # 读取txt文件
        with open(file_path, "r") as file:
            data = file.readlines()






